package com.gin.no_gay_alliance.utils;

import android.content.Context;
import android.content.DialogInterface;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;

import com.gin.no_gay_alliance.R;

/**
 * 弹窗工具类
 *
 * @author : ginstone
 * @version : v1.0.0
 * @since : 2023/9/14 11:05
 **/
public class AlertDialogUtils {
    /**
     * 一个展示简单信息的确认框
     *
     * @param context  上下文
     * @param title    标题
     * @param message  消息
     * @param listener 弹窗按钮点击回调
     * @return 弹窗对象
     */
    public static AlertDialog showConfirm(
            @NonNull Context context, @NonNull String title, @Nullable String message, DialogInterface.OnClickListener listener) {
        return showConfirm(context, title, message, null, listener);
    }

    /**
     * 一个展示简单信息的确认框
     *
     * @param context     上下文
     * @param title       标题
     * @param message     消息
     * @param contentView 正文view
     * @param listener    弹窗按钮点击回调
     * @return 弹窗对象
     */
    public static AlertDialog showConfirm(
            @NonNull Context context,
            @NonNull String title, @Nullable String message, @Nullable View contentView, DialogInterface.OnClickListener listener) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        if (listener != null) {
            builder.setPositiveButton(R.string.confirm, listener);
            builder.setNegativeButton(R.string.cancel, listener);
        }
        if (contentView != null) {
            builder.setView(contentView);
            builder.setOnDismissListener(d -> {
                if (contentView.getParent() != null) {
                    ((ViewGroup) contentView.getParent()).removeView(contentView);
                }
            });
        }
        AlertDialog dialog = builder.create();
        dialog.show();
        return dialog;
    }

    /**
     * 一个展示简单信息的弹窗
     *
     * @param context     上下文
     * @param title
     * @param message     消息
     * @param contentView
     * @return 弹窗对象
     */
    public static AlertDialog showMessage(@NonNull Context context, @NonNull String title, @Nullable String message, View contentView) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle(title);
        builder.setMessage(message);
        builder.setPositiveButton(R.string.confirm, null);
        if (contentView != null) {
            builder.setView(contentView);
        }
        AlertDialog dialog = builder.create();
        dialog.show();
        return dialog;
    }

    /**
     * 一个展示简单信息的警告框（点击外部区域不关闭）
     *
     * @param context 上下文
     * @param message 消息
     * @param title   标题
     * @return 弹窗对象
     */
    public static AlertDialog showAlert(@NonNull Context context, @NonNull String title, @NonNull String message) {
        AlertDialog dialog = showMessage(context, title, message, null);
        dialog.setCanceledOnTouchOutside(false);
        return dialog;
    }
}
